package com.List;

import java.util.LinkedList;

/**
 * LinkedList的特有功能，实现栈和队列
 */
public class LinkedListDemo1 {
    public static void main(String[] args) {
        //使用独有功能就不要使用多态
        //多态只能使用父类的方法
        LinkedList<String> list=new LinkedList<>();

        //addFirst方法：每次将元素加到第一个位置，压栈
        list.addFirst("第一课子弹");
        list.addFirst("第二课子弹");
        list.addFirst("第三课子弹");
        list.addFirst("第四课子弹");
        System.out.println(list);

        //removeFirst：每次都删除第一个元素：出栈
        list.removeFirst();
        System.out.println(list);
        list.removeFirst();
        System.out.println(list);
        list.removeFirst();
        System.out.println(list);
        list.removeFirst();
        System.out.println(list);
        //[第四课子弹, 第三课子弹, 第二课子弹, 第一课子弹]
        //[第三课子弹, 第二课子弹, 第一课子弹]
        //[第二课子弹, 第一课子弹]
        //[第一课子弹]
        //[]

        //专业方法
        //压栈
        list.push("第一课子弹");
        list.push("第二课子弹");
        list.push("第三课子弹");
        list.push("第四课子弹");
        System.out.println(list);

        //栈
        list.pop();
        System.out.println(list);
        list.pop();
        System.out.println(list);
        list.pop();
        System.out.println(list);
        list.pop();
        System.out.println(list);




        //getFirst：每次获取第一个元素
        System.out.println(list.getFirst());
        System.out.println(list.getFirst());
        System.out.println(list.getFirst());
        System.out.println("------------------------");
        //创建一个队列
        LinkedList<String > queue=new LinkedList<>();
        //入队：入队每次都在最后面入队，像我们排队打饭一样
        queue.addLast("第一个");//当前面没人的时候，最后一个此时就是第一个
        queue.addLast("第二个");
        queue.addLast("第三个");
        queue.addLast("第四个");
        System.out.println(queue);

        //出队
        queue.removeFirst();
        System.out.println(queue);
        queue.removeFirst();
        System.out.println(queue);
        queue.removeFirst();
        System.out.println(queue);
        queue.removeFirst();
        System.out.println(queue);

        //[第一个, 第二个, 第三个, 第四个]
        //[第二个, 第三个, 第四个]
        //[第三个, 第四个]
        //[第四个]
        //[]

    }
}
